<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>

</body>
<script>
	// * 创建一个空对象`obj`（`{}`）
	// * 将`obj`的`[__proto__]`属性指向构造函数的原型（即`obj.[[__proto__]] = constrc.prototype`）
	// * 将构造函数内部的`this`绑定到新建的对象`obj`，执行构造函数（也就是跟调用普通函数一样，只是此时函数的this为新创建的对象`obj`而已）
	// * 若构造函数没有返回非原始值（即不是引用类型的值），则返回该新建的对象`obj`（默认会添加`return this`）。否则，返回引用类型的值。
	
	function myNew(constrc){
		const obj = {};
		obj.__proto__ = constrc.prototype;
		const result = constrc.apply(obj,Array.from(arguments).slice(1));
		if((typeof result === "object" || typeof result ==="function") && result !== null){
			return result;
		}
		return obj;
	}
	
	function Box(userName,age){
		console.log(this,"box");
		this.userName = userName;
		this.age = age;
		// return {
		// 	a:1,
		// 	b:2
		// };
		return 1;
	}
	Box.prototype.fn = function(){
	
	}
	const obj = myNew(Box,"lisi",12);
	console.log(obj);
	


</script>
</html>